#include<bits/stdc++.h>
#define ll long long
using namespace std;

int _,n,L,R,cur;
int fa[1000005],cnt[1000005],qwq[1000005],col[1000005];
int rk[1000005],mx[2000005],mn[2000005];
vector<int> adj[1000005];

inline int root(int x){return fa[x]==x?x:fa[x]=root(fa[x]);}

inline void comb(int x,int y){fa[root((x+1)>>1)]=root((y+1)>>1);}

inline void add(int x,int y)
{
    x=root((x+1)>>1),y=root((y+1)>>1);
    adj[x].push_back(y),adj[y].push_back(x);
}

inline void sol()
{
    cin>>n;

    for(int i=1;i<=n;i++)
        fa[i]=i,cnt[i]=0,col[i]=-1,adj[i].clear();

    for(int i=1;i<=n;i++)
        cin>>rk[i];

    for(int i=1;i<=2*n-1;i++)
        cin>>mx[i];

    for(int i=1;i<=n;i++)
    {
        rk[i]++;
        if(rk[i]<1||rk[i]>n)
        {
            cout<<"-1\n";
            return;
        }
        cnt[rk[i]]++;
    }

    for(int i=1;i<=n;i++)
    {
        if(!cnt[i])
        {
            cout<<"-1\n";
            return;
        }
    }

    L=R=0;
    for(int i=1;i<=2*n-1;i++)
    {
        if((mx[i]&1)!=(i&1))
        {
            cout<<"-1\n";
            return;
        }
        
        if(mx[i]>n)
        {
            cout<<"-1\n";
            return;
        }

        if(i>R)
        {
            if(i&1)
            {
                L=i+2,R=i-2;
                for(int j=1;j<=mx[i];j+=2)
                {
                    L-=2,R+=2;
                    if(L<0||R>2*n)
                    {
                        cout<<"-1\n";
                        return;
                    }
                    comb(L,R);
                }
            }
            else
            {
                L=i+1,R=i-1;
                for(int j=2;j<=mx[i];j+=2)
                {
                    L-=2,R+=2;
                    if(L<0||R>2*n)
                    {
                        cout<<"-1\n";
                        return;
                    }
                    comb(L,R);
                }
            }

            L--,R++;
            mn[i]=R-i;

            continue;
        }

        if(i+mn[L+R-i]>R)
        {
            mn[i]=R-i;
            if(mx[i]!=mn[i])
            {
                cout<<"-1\n";
                return;
            }
        }
        else
        {
            mn[i]=mn[L+R-i];
            if(mx[i]<mn[i])
            {
                cout<<"-1\n";
                return;
            }
            while(mn[i]<mx[i])
            {
                mn[i]+=2;
                if(i-mn[i]<0||i+mn[i]>2*n)
                {
                    cout<<"-1\n";
                    return;
                }
                comb(i-mn[i]+1,i+mn[i]-1);
            }
        }

        if(i+mn[i]>=R)
            L=i-mn[i],R=i+mn[i];
    }

    for(int i=1;i<=n;i++)
        cnt[rk[i]]=i;

    for(int i=1;i<=2*n-1;i++)
    {
        if(i-mn[i]>0&&i+mn[i]<2*n)
            add(i-mn[i]-1,i+mn[i]+1);
    }

    for(int i=1;i<n;i++)
    {
        int a=rk[i],b=rk[i+1];
        if(b==n||cnt[a+1]>cnt[b+1])
            add(2*a-1,2*b-1);
    }

    qwq[rk[1]]=0;
    col[root(rk[1])]=cur=0;
    for(int i=1;i<n;i++)
    {
        int a=root(rk[i]),b=root(rk[i+1]);
        
        for(int j:adj[b])
        {
            if(col[j]!=-1&&col[j]==cur)
                cur++;

            if(j==b)
            {
                cout<<"-1\n";
                return;
            }
        }

        if(cur>=26)
        {
            cout<<"-1\n";
            return;
        }

        if(col[b]!=-1&&col[b]!=cur)
        {
            cout<<"-1\n";
            return;
        }

        col[b]=qwq[rk[i+1]]=cur;
    }

    for(int i=1;i<=n;i++)
        cout<<char('a'+qwq[i]);
    cout<<'\n';
}

int main()
{
    freopen("string.in","r",stdin);
    freopen("string.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    cin>>_;
    while(_--)
        sol();

    return 0;
}